package servico;

import dao.MedicamentoDAO;
import dao.fabrica.FabricaDeDAOs;
import excecao.AplicacaoException;
import excecao.ObjetoDuplicadoException;
import excecao.ObjetoNaoEncontradoException;
import java.util.List;
import modelo.Medicamento;
import modelo.Medico;
import modelo.Prescricao;
import modelo.Residente;

public class MedicamentoAppService {

    private static MedicamentoDAO MedicamentoDAO = FabricaDeDAOs.getDAO(MedicamentoDAO.class);

    public void inclui(Medicamento umMedicamento) throws AplicacaoException {
        try {
            MedicamentoDAO.inclui(umMedicamento);

        } catch (ObjetoDuplicadoException e) {
            throw new AplicacaoException("Medicamento já cadastrado");
        }

    }

    public void altera(Medicamento umMedicamento)
            throws AplicacaoException {
        try {

            MedicamentoDAO.altera(umMedicamento);

        } catch (ObjetoNaoEncontradoException e) {

            throw new AplicacaoException("Medicamento não encontrado");
        }
    }

    public void exclui(Medicamento umMedicamento)
            throws AplicacaoException {
        try {

            MedicamentoDAO.exclui(umMedicamento);

        } catch (ObjetoNaoEncontradoException e) {

            throw new AplicacaoException("Medicamento não encontrado");
        }
    }

    public Medicamento recuperaUmMedicamento(long idMedicamento)
            throws AplicacaoException {
        try {

            Medicamento medicamento = MedicamentoDAO.recuperaUmMedicamento(idMedicamento);

            return medicamento;
        } catch (ObjetoNaoEncontradoException e) {

            throw new AplicacaoException("Medicamento não encontrado");
        }
    }

    public List<Medicamento> recuperaMedicamentos() {
        List<Medicamento> Medicamento = null;


        Medicamento = MedicamentoDAO.recuperaMedicamentos();

        return Medicamento;
    }

    //rever decremento e comparação com ids
    public boolean decrementaMedicamento(Integer quantidade, Medicamento medicamento) throws AplicacaoException {
        boolean estoque = true;
        medicamento.setQuantidade(medicamento.getQuantidade() - quantidade);
        if (medicamento.getQuantidade() <= 0) {
            estoque = false;
        }else{
            altera(medicamento);
        }
            
        return estoque;
    }
}
